package me.zhengjie.modules.system.service

import jakarta.servlet.http.HttpServletResponse
import me.zhengjie.modules.system.domain.*
import me.zhengjie.modules.system.domain.vo.MenuVo
import me.zhengjie.modules.system.service.dto.MenuDTO
import me.zhengjie.modules.system.service.dto.MenuQueryCriteria
import java.io.IOException

/**
 * @author Kuki Wu
 * @date 2018-12-17
 */
interface MenuService {
    fun queryAll(criteria: MenuQueryCriteria, isQuery: Boolean): List<MenuDTO?>?
    fun findById(id: Long): MenuDTO?
    //fun create(resources: Menu): MenuDTO?
    fun create(resources: Menu)
    fun update(resources: Menu)
    fun getChildMenus(menuList: MutableList<Menu?>?, menuSet: MutableList<Menu?>?): MutableList<Menu?>?
    fun buildTree(menuDtos: List<MenuDTO?>?): List<MenuDTO?>?
    fun buildMenus(byRoles: List<MenuDTO?>): List<MenuVo>
    //fun getDeleteMenus(menuList: List<Menu>, menuSet: MutableSet<Menu>): Set<Menu>
    //fun buildTree(menuDTOS: List<MenuDTO>): Map<String, Any>
    //fun getMenuTree(menus: List<Menu>): Any
    //fun findByPid(pid: Long): List<Menu>

    //fun findByRoles(roles: List<RoleSmallDTO>): List<MenuDTO>

    fun findOne(id: Long): Menu
    fun delete(menuSet: Set<Menu>)

    @Throws(IOException::class)
    fun download(queryAll: List<MenuDTO>, response: HttpServletResponse?)

    /**
     * 懒加载菜单数据
     * @param pid /
     * @return /
     */
    fun getMenus(pid: Long?): List<MenuDTO?>?

    /**
     * 根据ID获取同级与上级数据
     * @param menuDto /
     * @param objects /
     * @return /
     */
    fun getSuperior(menuDto: MenuDTO?, menus: MutableList<Menu?>): List<MenuDTO?>?

    /**
     * 根据当前用户获取菜单
     * @param currentUserId /
     * @return /
     */
    fun findByUser(currentUserId: Long?): List<MenuDTO?>?
}